perm filename HHTERM.FAI[CMS,LCS]1 blob
sn#324392 filedate 1977-12-23 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00009 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 .INSERT ASMBL.FAI[CMS,LCS]
C00003 00003 Reset
C00005 00004 REFRESH LOOP
C00007 00005 WAIT LOOP AND SETUP
C00009 00006 RS232 INTERUPT ROUTINE (RAM JUMP?)
C00010 00007 RS232 CONTROL
C00012 00008 KB INTERUPT ROUTINE (VECTOR TO RAM JUMP?)
C00014 00009 ASCII TABLE (KBD)
C00015 ENDMK
C⊗;
.INSERT ASMBL.FAI[CMS,LCS]
CPL ← = 28 ;CHRS PER LINE
NCHRS ← = 112 ;CHRS PER SCREEN
; Zpage ram
COL: 0
CUR: 0
0
WINDOW: 0
0
LOC 500 ;?
REBUF: 0 ;ASCII CHR BUF
LOC 2000
ABUF: 0 ;REFRESH BUFFER
; Reset
LOC 174000
RSTA: CLD ;CLEAR DECIMAL MODE
LDXI 177 ;STACK DEPTH
TXS ;SETUP STACK
;RESET RAM JUMPS?
;RESET I/O BUT DON'T CLR SCREEN ON NMI?
; SETUP AND CLEAR SCREEN
;CLEAR ABUF
;CLEAR TO END OF LINE *32?
SD ← 4 ;START OF ABUF
LDAI 0
STAZ CUR ;SETUP CURSOR
STAZ WINDOW ;SETUP WINDOW
LDAI SD
STAZ CUR+1
STAZ WINDOW+1
JSR UPDATE ;CLEAR REBUF
; INIT I/O
;INIT RS232
SIODEF ← 225 ;UART CONTROL WORD
ACIAC ← ACIA ;UART CONTROL REG ADDRESS
ACIAD ← ACIA+1 ;UART DATA REG ADDRESS
LDAI 3 ;RESET ACIA
STA ACIAC
LDAI SIODEF ;SETUP DEFAULT I/O CONTROL
STA ACIAC
;INIT KB SCANER
KBD ← KB
KBC ← KB+1
CLI ;?
; REFRESH LOOP
NCHRS ← =112 ;NUMBER OF CHRS ON SCREEN
DPYSR ← ;DISPLAY SHIFT REGISTER ADDRESS
LDXI NCHRS-1 ;112 ∨ 128
RELOOP: LDAI 1
STAZ COL ;SETUP COL BIT 1
SLOOP0: LDAX REBUF0 ;PUT FIRST COL IN SHIFT
STA DPYSR ;REGISTER STARTING WITH LAST CHR
DEX
BPL SLOOP0
JSR NXCOL ;TURN ON COL AND WAIT
SLOOP1: LDAX REBUF1 ;SECOND
STA DPYSR
DEX
BPL SLOOP1
JSR NXCOL
SLOOP2: LDAX REBUF2 ;THIRD
STA DPYSR
DEX
BPL SLOOP2
JSR NXCOL
SLOOP3: LDAX REBUF3 ;FORTH
STA DPYSR
DEX
BPL SLOOP3
JSR NXCOL
SLOOP4: LDAX REBUF4 ;FIFTH
STA DPYSR
DEX
BPL SLOOP4
JSR NXCOL
JMP RELOOP ;TIMER?
; WAIT LOOP AND SETUP
COLREG ← ;COL ENABLE REGISTER ADDRESS
CPL ← = 28 ;NUMBER OF CHRS PER LINE
NXCOL: LDAZ COL
STA COLREG ;TURN ON COL
;WAIT (BRIGHTNESS)
ASLZ COL ;SHIFT FOR NEXT COL
LDXI NCHRS-1 ;112 ∨ 128
LDAI 0
STA COLREG ;TURN OFF COL
RTS
; CLEAR LINE
CLRLIN: LDYI CPL-1 ;# CHRS PER LINE
LDAI 40 ;<space>
CLRL: STAIY CUR ;FILL CURSOR THRU CURSOR + 37
DEY ;WITH SPACES
BPL CLRL
RTS
; UPDATE SCREEN
UPDATE: LDYI NCHRS-1 ;112 ∨ 128
UPLOP: LDAIY WINDOW ;GET CHR FROM ABUF
TAX
LDAX CHRGEN0 ;FILL REBUF COL BY COL
STAY REBUF0 ;CHR BY CHR
LDAX CHRGEN1
STAY REBUF1
LDAX CHRGEN2
STAY REBUF2
LDAX CHRGEN3
STAY REBUF3
LDAX CHRGEN4
STAY REBUF4
DEY
BPL UPLOP
RTS
; RS232 INTERUPT ROUTINE (RAM JUMP?)
RSINT: PHA ;SAVE REGS
TXA
PHA
TYA
PHA
LDA ACIAD ;GET CHR FROM ACIA
CLI ;?
CMPI ?? ;
BCC SCNTRL
CMPI ?? ;
BCS SCNTRL
LDXI 0
STAIX CUR ;STORE IN ABUF
;CK IF IN WINDOW
TAX
LDYZ CUR
LDAX CHRGEN0 ;PUT CHRGEN COL BITS IN REBUF(CUR)
STAY REBUF0
LDAX CHRGEN1
STAY REBUF1
LDAX CHRGEN2
STAY REBUF2
LDAX CHRGEN3
STAY REBUF3
LDAX CHRGEN4
STAY REBUF4
INCZ CUR ;CUR←CUR+1
BNE 2
INCZ CUR+1
;CK FOR SCROLL
RSRTRN: PLA ;RESTORE REGS
TAY
PLA
TAX
PLA
RTI ;RETURN
; RS232 CONTROL
SCNTRL: CMPI 15 ;<cr>
BEQ RCR
CMPI 177 ;<bspace>
BEQ RBS
; CMPI ;LOAD
BEQ LOAD
; CMPI ;OTHER
BNE RSRTRN
;OTHER RS CONTROL FUNCTIONS
JMP RSRTRN
; <cr>
ED ← ;END OF ABUF
RCR: LDAZ CUR
ORAI 37 ;FOR ≤32 CHRS
STAZ CUR
INCZ CUR
BNE NOOV
INCZ CUR+1
LDAZ CUR+1
CMPI ED ;CK IF OFF END
BNE NOOV
LDAI SD ;START OVER
STAZ CUR+1
NOOV:
; JSR CLRLIN
;CK IF IN WINDOW THEN SCROLL
;UPDATE? ∨ UPDATE LINE?
;RETURN
; <bspace>
RBS: LDAZ CUR
BNE NOC
DECZ CUR+1
LDAZ CUR+1
CMPI SD-1
BNE NOC
LDAI ED-1 ;WRAP AROUND
NOC: DECZ CUR
LDAI 40 ;<space>
JSR GENCHR
;CK UPDATE
;RETURN
; KB INTERUPT ROUTINE (VECTOR TO RAM JUMP?)
KBCHR ← ;KEYBOARD DATA REGISTER ADDRESS
KBINT: PHA ;SAVE REGS
TXA
PHA
LDA KBCHR ;GET CHR FROM KB
CLI ;?
CMPI ?? ;
BCC KCNTRL
CMPI ?? ;
BCS KCNTRL
TAX
LDAX ASCII ;CONVERT TO ASCCI
JSR ORSW ;OUTPUT TO RS232 WAIT
KBRTRN: PLA ;RESTORE REGS
TAX
PLA
RTI ;RETURN
; KB CONTROL
; KCNTRL: CMPI ;SCROLL UP
BEQ SCRLU
; CMPI ;SCROLL DOWN
BEQ SCRLD
; CMPI ;BRIGHTNESS
BEQ BRIGHT
; CMPI ;OTHER HALF OF LINES
BEQ OHALF
; CMPI ;OTHER
BNE KBRTRN
;EXTRA KB CONTROL FUNCTIONS
JMP KBRTRN
; SCROLL DOWN
SCRLD: LDAZ WINDOW
CLC
ADCI 40 ;FOR ≤32 CHRS
STAZ WINDOW
BCC NOWA
INCZ WINDOW+1
LDAZ WINDOW+1
CMPI ED
BNE NOWA
LDAI SD
STAZ WINDOW+1
NOWA:
;CK UPDATE?
;RETURN
; SCROLL UP
SCRLU: LDAZ WINDOW
SEC
SBCI 40 ;≤32 CHRS PER LINE
STAZ WINDOW
BCS NOUN
DECZ WINDOW+1
LDAZ WINDOW+1
CMPI SD-1
BNE NOUN
LDAI ED-1
STAZ WINDOW+1
NOUN:
;UPDATE
;RETURN
; WAIT UNTIL RS232 ← CHR
ORSW: PHA ;SAVE CHR
WAIT: LDA ACIAC
ANDI 2 ;CHECK IF FULL
BEQ WAIT
PLA
STA ACIAD ;OUTPUT IT
RTS
; ASCII TABLE (KBD)
; 3B 7B
; CHRGEN (COL,CHR)
; INTER VECTS
LOC 200265
; LOC 177772
0
NMIV: 5
2
RSTV: 30
374
IRQV: 0
2
; NMIV: ABSO RSINT ; 2
; RSTV: ABSO RSTA ; 2
; IRQV: ABSO KBINT ; _2_
; 6
END